//判断一个数的数字计数是否等于数位的值
/*给你一个下标从 0 开始长度为 n 的字符串 num ，它只包含数字。

如果对于 每个 0 <= i < n 的下标 i ，都满足数位 i 在 num 中出现了 num[i]次，那么请你返回 true ，否则返回 false 。
*/
class Solution {
public:
    bool digitCount(string num) {
        int hash[10] = {0};
        for (auto& c : num) {
            hash[c - '0']++;
        }
        for (int i = 0; i < num.size(); i++) {
           // cout<<hash[i]<<endl;
            if (hash[i] != num[i]-'0')
                return false;
        }
        return true;
    }
};


//元素和最小的山形三元组 I
/*给你一个下标从 0 开始的整数数组 nums 。

如果下标三元组 (i, j, k) 满足下述全部条件，则认为它是一个 山形三元组 ：

i < j < k
nums[i] < nums[j] 且 nums[k] < nums[j]
请你找出 nums 中 元素和最小 的山形三元组，并返回其 元素和 。如果不存在满足条件的三元组，返回 -1 。
*/
class Solution {
public:
    int minimumSum(vector<int>& nums) {
        vector<int> left_arr(nums.size());
        int left = INT_MAX;
        int res = 1000;
        for (int i = 1; i < nums.size() - 1; i++) {
            left = min(nums[i - 1], left);
            left_arr[i] = left;
        }
        int right = nums[nums.size() - 1];
        for (int i = nums.size() - 2; i > 0; i--) {
            if (left_arr[i] < nums[i] && nums[i] > right) {
                res = min(res, left_arr[i] + nums[i] + right);
            }
            right = min(right, nums[i]);
        }
        return res < 1000 ? res : -1;
    }
};